/**
 * @desc  [自定义校验规则]
 * @example
 *  import { validateRule } from "@/utils/validateRules";
 *  rules: [
 *     { validator: validateRule.emailValue, trigger: 'blur'}
 *  ]
 */
import {isNameCn} from './validate'
export const rule = {
  /**
   * 校验 请输入中文、英文、数字包括下划线
   * 名称校验
   */
  validatorNameCn(rule, value, callback) {
    let acount = /^[\u4E00-\u9FA5A-Za-z0-9_]+$/;
    if (value && !acount.test(value)) {
      callback(new Error("请输入中文、英文、数字包括下划线"));
    } else {
      callback();
    }
  },

    /**
   * 校验 请输入字母、数字包括下划线
   * 名称校验
   */
     validatorAccountCn(rule, value, callback) {
      let acount = /^[A-Za-z0-9_]+$/;
      if (value && !acount.test(value)) {
        callback(new Error("请输入字母、数字或下划线"));
      } else {
        callback();
      }
    },

  /**
   * 校验 请输入大写英文、下划线
   * 名称校验
   */
  validatorKey(rule, value, callback) {
    let acount = /^[A-Z_]+$/;
    if (value && !acount.test(value)) {
      callback(new Error("请输入大写英文、下划线"));
    } else {
      callback();
    }
  },

  /**
   * 校验首尾空白字符的正则表达式
   *
   */
  checkSpace(rule, value, callback) {
    let longrg = /[^\s]+$/;
    if (!longrg.test(value)) {
      callback(new Error("请输入非空格信息"));
    } else {
      callback();
    }
  },

  /**
   * 校验 请输入数字
   * 名称校验
   */
  validatorNumber(rule, value, callback) {
    let acount = /^[0-9]+$/;
    if (value && !acount.test(value)) {
      callback(new Error("请输入数字"));
    } else {
      callback();
    }
  },
  /**
   * 校验 手机号码
   * @param {*} s
   */
  validatorIsMobile(rule, value, callback) {
    let acount = /^1[0-9]{10}$/;
    if (value && !acount.test(value)) {
      callback(new Error("请输入正确的手机格式"));
    } else {
      callback();
    }
  },
   /**
   * 校验 邮箱
   * @param {*} s
   */
    validatorIsEmail(rule, value, callback) {
      let acount = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
      if (value && !acount.test(value)) {
        callback(new Error("请输入正确的邮箱格式"));
      } else {
        callback();
      }
    },
  /**
   * 用户名校验(中文，英文，数字，下划线)
   * @param {*} s
   */
   validatorUsername(rule, value, callback) {
    if (!isNameCn(value)) {
      callback(new Error("用户名包含中英文，数字，下划线"));
    } else {
      callback();
    }
  },
   /**
   * 密码等保校验(包含大小写字母，数字，或特殊符号的三种字符)
   * @param {*} s
   */
  validatePwd(rule, password, callback) {
    password = password + ''
    let modes = 0
    if (/\d/.test(password) || /[a-z]/.test(password) || /\W/.test(password) || /[A-Z]/.test(password)){ //数字、大小写字母、符号
      if(/\d/.test(password)){
        modes++;
      }
      if(/[a-z]/.test(password)){
        modes++;
      }
      if(/[A-Z]/.test(password)){
        modes++;
      }
      if(/\W/.test(password)){
        modes++;
      }
    }
    if(modes < 3){
      callback(new Error('密码至少包含大小写字母、数字、符号中的三种!'))
    } else{
      callback()
    }
  },
  /**
   * 校验 mac地址
   */
   validatorMac(rule, value, callback) {
    let acount = /[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}:[A-Fa-f0-9]{2}/;
    if (value && !acount.test(value)) {
      callback(new Error("MAC地址格式不正确"));
    } else {
      callback();
    }
  },
  /**
   * 校验IP地址
   * 名称校验
   */
   validatorIP(rule, value, callback) {
    let reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/
    if (value && !reg.test(value)) {
      callback(new Error("IP地址格式不正确"));
    } else {
      callback();
    }
  },
};
